package com.gyy.androidlibraryapp.utils;

import android.text.TextUtils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

/**
 *  Description 日期操作类
 */
public class DateHelper {

  private static final String TAG = DateHelper.class.getSimpleName();

  public static final String ALL = "yyyy-MM-dd HH:mm:ss";
  public static final String YEAR_MONTH_DAY = "yyyy-MM-dd";
  public static final String HOURS_MINS = "HH:mm";

    /**
     * 日期格式化，精确到分.
     */
    public static final String MINUTE_FORMAT = "yyyy-MM-dd HH:mm";

  /**
   * 根据时间字符串得到date.
   *
   * @param dateStr 时间字符串
   * @param format 格式化类型
   * @return 时间 date
   */
  public static Date getDate(String dateStr, String format) {
    Date mDate = null;
    if (!TextUtils.isEmpty(dateStr)) {
      DateFormat mDateFormat = new SimpleDateFormat(format, Locale.getDefault());
      try {
        mDate = mDateFormat.parse(dateStr.replace("T", " ").replace("Z", " "));
      } catch (ParseException e) {

      }
    }
    return mDate;
  }

  /**
   * 根据时间得到日期字符串.
   *
   * @param date 时间
   * @param format 格式化类型
   * @return 日期字符串 string date
   */
  public static String getStringDate(Date date, String format) {
    String mResult = null;
    if (date != null) {
      DateFormat mDateFormat = new SimpleDateFormat(format, Locale.getDefault());
      mResult = mDateFormat.format(date);
    }
    return TextUtils.isEmpty(mResult) ? "" : mResult;
  }

  /**
   * 根据时间得到几个月前的日期字符串.
   *
   * @param date 时间
   * @param format 格式化类型
   * @param count 几个月前
   * @return 日期字符串 string date
   */
  public static String getStringDate(Date date, String format, int count) {
    String mResult = null;
    if (date != null) {
      Calendar mRightNow = Calendar.getInstance();
      mRightNow.setTime(date);
      mRightNow.add(Calendar.MONTH, count);//日期加（减）count个月
      Date mDataTime = mRightNow.getTime();
      mResult = DateHelper.getStringDate(mDataTime, format);
    }
    return TextUtils.isEmpty(mResult) ? "" : mResult;
  }

  /**
   * 根据时间得到几月（日）前的日期字符串.
   *
   * @param date 时间
   * @param format 格式化类型
   * @param count 几个月前
   * @param type Calendar.MONTH 月
   * Calendar.DATE 日
   * @return 日期字符串 string date
   */
  public static String getStringDate(Date date, String format, int count, int type) {
    String mResult = null;
    if (date != null) {
      Calendar mRightNow = Calendar.getInstance();
      mRightNow.setTime(date);
      mRightNow.add(type, count);//日期加（减）count个月
      Date mDataTime = mRightNow.getTime();
      mResult = DateHelper.getStringDate(mDataTime, format);
    }
    return TextUtils.isEmpty(mResult) ? "" : mResult;
  }

  /*时间戳转换成字符窜*/
  public static String getDateToString(long time, String format) {
  Date d = new Date(time);
  SimpleDateFormat sf = new SimpleDateFormat(format);
  return sf.format(d);
  }

  /**
   * 获得手机本地时间
   *
   * @param dateStr 时间字符串
   * @param format 格式化类型
   * @return 时间 date
   */
  public static String getPhoneZoneDate(String dateStr, String format) {
    Date date = getDate(dateStr, format);
    date = changeTimeZone(date, TimeZone.getTimeZone("GMT"), TimeZone.getDefault());
    return getStringDate(date, format);
  }

  /**
   * 获得手机本地时间
   *
   * @param dateStr 时间字符串
   * @param format 格式化类型
   * @return 时间 date
   */
  public static long getPhoneZoneLongDate(String dateStr, String format) {
    Date date = getDate(dateStr, format);
    date = changeTimeZone(date, TimeZone.getTimeZone("GMT"), TimeZone.getDefault());
    return date.getTime();
  }

  /**
   * 获得更改时区后的时间
   *
   * @param date 日期
   * @param oldZone 旧时区对象
   * @return newZone 新时区对象
   */
  public static Date changeTimeZone(Date date, TimeZone oldZone, TimeZone newZone) {
    Date dateTmp = null;
    if (date != null) {
      int timeOffset = oldZone.getRawOffset() - newZone.getRawOffset();
      dateTmp = new Date(date.getTime() - timeOffset);
    }
    return dateTmp;
  }

  /**
   * 将date 转换为Default 时间
   *
   * @return 将date 转换为GMT 时间
   */
  public static String convertTimeToDefault(Date date, String format) {
    Date gmtDate = changeTimeZone(date, TimeZone.getTimeZone("GMT"), TimeZone.getDefault());
    String newTime = getStringDate(gmtDate, format);
    return newTime;
  }

  /**
   * 当前的 小时
   */
  public static int getHourOfDay(Date date) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    return calendar.get(Calendar.HOUR_OF_DAY);
  }

}
